package top.lixunda.ecommerce.server.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageDTO;
import top.lixunda.ecommerce.server.user.api.entity.db.BusinessTaskDO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskCloseDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskCommitDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskQueryDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.BusinessTaskStartDTO;
import top.lixunda.ecommerce.server.user.api.entity.vo.BusinessTaskVO;

import java.util.List;

/**
 * <p>
 * 代办任务数据，保存代办任务 服务类
 * </p>
 *
 * @author Xumda
 * @since 2020-04-13
 */
public interface IBusinessTaskService extends IService<BusinessTaskDO> {

    /**
     * 通过taskId查询代办任务信息
     *
     * @param taskId 任务编号
     * @return 代办任务信息，包括所有的任务分配数据
     */
    BusinessTaskVO queryTaskByTaskId(Integer taskId);

    /**
     * 通过taskId查询代办任务信息
     *
     * @param taskIds 任务编号
     * @return 代办任务信息，包括所有的任务分配数据
     */
    List<BusinessTaskVO> queryTaskByTaskIds(List<Integer> taskIds);

    /**
     * 通过taskName查询当前登陆人员的代办任务信息
     *
     * @param taskName 任务名称
     * @return 代办任务信息，只包括当前登陆人员的任务分配数据
     */
    List<BusinessTaskVO> queryTaskByTaskName(String taskName);

    /**
     * 通过条件分页查询代办任务信息
     *
     * @param pageDTO 条件分页数据
     * @return 分页的代办任务信息
     */
    IPage<BusinessTaskVO> queryTaskByPageWrapper(
            PageDTO<BusinessTaskDO, BusinessTaskQueryDTO> pageDTO);

    /**
     * 通过taskId查询当前登陆人员的代办任务信息，登陆权限
     *
     * @param taskId 任务编号
     * @return 代办任务信息，只包括当前登陆人员的任务分配数据
     */
    BusinessTaskVO queryCurrentUserTaskByTaskId(Integer taskId);

    /**
     * 通过taskId查询当前登陆人员的代办任务信息，登陆权限
     *
     * @param taskName 任务名称
     * @return 代办任务信息，只包括当前登陆人员的任务分配数据
     */
    List<BusinessTaskVO> queryCurrentUserByTaskName(String taskName);

    /**
     * 通过条件分页查询查询当前登陆人员的代办任务信息，登陆权限
     *
     * @param pageDTO 条件分页数据
     * @return 分页的代办任务信息
     */
    IPage<BusinessTaskVO> queryCurrentUserTaskByPageWrapper(
            PageDTO<BusinessTaskDO, BusinessTaskQueryDTO> pageDTO);

    /**
     * 根据taskId查询当前登陆人员的代办任务，登陆权限
     *
     * @param taskId 任务编号
     * @return 代办任务数据
     */
    BusinessTaskVO queryUserToDoByTaskId(Integer taskId);

    /**
     * 根据taskName查询当前登陆人员的代办任务，登陆权限
     *
     * @param taskName 任务名称
     * @return 代办任务数据
     */
    List<BusinessTaskVO> queryUserToDoByTaskName(String taskName);

    /**
     * 根据条件分页信息查询当前登陆人员的代办任务，登陆权限
     *
     * @param pageDTO 条件分页数据
     * @return 分页的代办任务信息
     */
    IPage<BusinessTaskVO> queryUserToDoByPageWrapper(
            PageDTO<BusinessTaskDO, BusinessTaskQueryDTO> pageDTO);

    /**
     * 根据taskId删除任务，登陆权限
     *
     * @param taskIds 任务编号列表
     * @return 关闭的任务数据
     */
    List<BusinessTaskVO> removeTaskByTaskIds(List<Integer> taskIds);

    /**
     * 开启任务
     *
     * @param list 开启任务参数
     * @return 开启的流程
     */
    List<BusinessTaskVO> startTask(List<BusinessTaskStartDTO> list);

    /**
     * 提交任务
     *
     * @param list 提交任务参数
     * @return 开启的流程
     */
    List<BusinessTaskVO> commitTask(List<BusinessTaskCommitDTO> list);

    /**
     * 关闭任务
     *
     * @param list 关闭流程参数
     * @return 是否关闭成功
     */
    Boolean closeTask(List<BusinessTaskCloseDTO> list);

}
